package activities;

import webService.AccesoWebService;

import com.androidmodule.onthego.R;

import entidades.PromocionComun;
import excepciones.PromocionEliminadaExcepcion;
import extras.Fonts;
import extras.NetInfo;
import android.app.Activity;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;

public class ActivityPromocionComun extends Activity {

	private TextView textoTitulo, textoDescripcion, textoDescuento,
			textoComercio, textoCentroComercial,textoCategoria, textoTipoDePago, txtValidez;
	int idPromocion;
	private ImageView imagen_PromoComun;
	private hiloPromocionComun hiloPromocion;
	private ProgressBar progresoPromocionComun;
	protected TextView textoListaVacia;
	private PromocionComun promoSeleccionada;
	
	
	////////////////////////////////////////CICLO DE VIDA////////////////////////////////////////
	public void onResume(Bundle savedInstanceState) {
		super.onResume();
	}

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.layout_promocion_comun);
		hiloPromocion = new hiloPromocionComun();
		idPromocion = getIntent().getExtras().getInt("PromocionId");
		progresoPromocionComun = (ProgressBar)
				findViewById(R.id.progressBarPromocionComun);
		textoListaVacia = (TextView) findViewById(android.R.id.empty);
		promoSeleccionada = new PromocionComun();

		textoTitulo = (TextView) 
				findViewById(R.id.etiqueta_tituloPromocionComun);
		textoTitulo.setTypeface(Fonts.mvboli(getApplicationContext()));
		imagen_PromoComun = (ImageView) 
				findViewById(R.id.imagen_promocionComunParticular);
		textoDescuento = (TextView) 
				findViewById(R.id.etiqueta_descuentoPromocionComun);
		textoDescuento.setTypeface(Fonts.impact(getApplicationContext()));
		textoDescripcion = (TextView) 
				findViewById(R.id.etiqueta_descripcionPromocionComun);
		textoDescripcion.setTypeface(Fonts.arialNarrow(getApplicationContext()));
		
		textoComercio = (TextView) 
				findViewById(R.id.etiqueta_comercioPromocionComun);
		textoComercio.setTypeface(Fonts.arialNarrow(getApplicationContext()));
		textoCentroComercial = (TextView) 
				findViewById(R.id.etiqueta_centroComercialPromocionComun);
		textoCentroComercial.setTypeface(Fonts.arialNarrow(getApplicationContext()));
		
		textoCategoria = (TextView) 
				findViewById(R.id.etiqueta_categoriaPromocionComun);
		textoCategoria.setTypeface(Fonts.arialNarrow(getApplicationContext()));
		textoTipoDePago = (TextView) 
				findViewById(R.id.etiqueta_tipoPagoPromocionComun);
		textoTipoDePago.setTypeface(Fonts.arialNarrow(getApplicationContext()));
		txtValidez = (TextView) findViewById(R.id.etiqueta_validez_fecha);
		txtValidez.setTypeface(Fonts.arialNarrow(getApplicationContext()));
		

		if (savedInstanceState == null) {
			buscarPromocion();
			
		} 
		else{
		    cargarPromocionComun((PromocionComun) savedInstanceState
					.get("promocion"));
		}
		
	}

	@Override
	public void onSaveInstanceState(Bundle savedInstanceState) {
		// Always call the superclass so it can save the view hierarchy state
	    super.onSaveInstanceState(savedInstanceState);
		savedInstanceState.putParcelable("promocion", promoSeleccionada);
		
	}
	
	/**
	 * Recibe como parametro la promocion Comun obtenidas del servidor y las
	 * carga en los campos del layout
	 * 
	 * @param promocionWebService
	 *            no tiene retorno
	 */
	public void cargarPromocionComun(PromocionComun promocionWebService) {
		promoSeleccionada = promocionWebService;
		textoTitulo.setText(promoSeleccionada.getTitulo());
		textoDescripcion.setText(promoSeleccionada.getDescripcion());
		textoDescuento.setText(getString(R.string.etiqueta_descuento)
				+ " " + String.valueOf(promoSeleccionada.getDescuento())
				+ getString(R.string.etiqueta_porcentaje));
		textoComercio.setText(promoSeleccionada.getComercio());
		textoCentroComercial.setText(promoSeleccionada
				.getCentroComercial());
		textoTipoDePago.setText(getString(R.string.etiqueta_tipoPago) + " "+ promoSeleccionada.getTipoPago());
		textoCategoria.setText(getString(R.string.etiqueta_categoria)+" "+promoSeleccionada.getCategoria());
		if (promoSeleccionada.getImagen() != null) {
			imagen_PromoComun.setImageBitmap(promoSeleccionada.getImagen());
		}
		txtValidez.setText(promoSeleccionada.getsFechaFin());
		imagen_PromoComun.setVisibility(ImageView.VISIBLE);
		this.textoListaVacia.setText("");
	}

	/**
	 * Metodo que encapsula la funcionalidad asociada con la busqueda de
	 * promociones
	 */
	public void buscarPromocion() {
		if (NetInfo.isOnline(getApplicationContext())) {
			// textoListaVacia.setText(R.string.lista_buscandoPromociones);
			progresoPromocionComun.setVisibility(ProgressBar.VISIBLE);
			textoListaVacia.setText(R.string.etiqueta_carga_promocion);
			hiloPromocion.execute();

		} else {
			Intent sinConexion = new Intent(this, ActivityNoConexion.class);
			startActivity(sinConexion);
		}
	}
	
	/////////////////////////////////////////////////////HILOS/////////////////////////////////////////
	/**
	 * Clase interna, es el hilo que busca las promocion comun seleccionada en
	 * el servidor
	 * 
	 */
	public class hiloPromocionComun extends
		AsyncTask<Void, Integer, PromocionComun> {
		int codigoError= AccesoWebService.NO_ERROR;
		PromocionComun promocionWebService;

		public hiloPromocionComun() {
			promocionWebService = new PromocionComun();
		}

		@Override
		protected PromocionComun doInBackground(Void... params) {
			try {
				AccesoWebService accesoWeb = new AccesoWebService();
				promocionWebService = accesoWeb.getPromocionComun(idPromocion);
			} catch (java.net.SocketTimeoutException timeOut) {
				codigoError = AccesoWebService.TIMEOUT_ERROR;
			}
			catch(PromocionEliminadaExcepcion promEli){
				codigoError= AccesoWebService.PROMOCION_ELIMINADA;
			}
			return promocionWebService;
		}

		protected void onProgressUpdate(Integer... values) {}

		protected void onPostExecute(PromocionComun promocion) {
			if (codigoError==AccesoWebService.TIMEOUT_ERROR) {
	       	       textoListaVacia.setText(getString(R.string.mensaje_sinAccesoServidor));
			}
			else if(codigoError==AccesoWebService.PROMOCION_ELIMINADA){
				Toast.makeText(getApplicationContext(), 
				         getApplicationContext().getString(R.string.excepcion_promocion_eliminada),
				         Toast.LENGTH_LONG).show();
				finish();	
			}
			else {
				cargarPromocionComun(promocion);
			}
			progresoPromocionComun.setVisibility(ProgressBar.GONE);
		}
	}
}
